package ocio.services;

import java.util.ArrayList;
import java.util.List;
import com.opensymphony.xwork2.Action;
import ocio.actions.AddOfertaAction;
import ocio.actions.ModificarOfertaAction;
import ocio.beans.Oferta;
import ocio.dao.OfertaDao;

/**
 * Clase encargada de ofrecer la lógica de negocio asociada a la clase Oferta.
 * Ofrece funciones CRUD para la gestión de ofertas.
 * @author Esther García Galán
 * @author Rubén Gómez Vales
 * @version 1.0 13/05/2014
 * @see ocio.beans.Oferta
 * @see ocio.services.ServiceIF
 */
public class OfertaService implements ServiceIF {

	OfertaDao OfertaDao;
	
	public OfertaService (){
		OfertaDao = new OfertaDao();
	}
	
	/**
	 * Solicita que se añada una oferta con los datos recogidos en un objeto de la clase Action
	 * @param form objeto de la clase Action con los datos de la oferta.
	 */
	@Override
	public boolean add(Action form) {	
		Oferta f = new Oferta();
		AddOfertaAction pform = (AddOfertaAction) form;
		f.setNombre(pform.getNombre());
		if (OfertaDao.findByExample(f).size()==0) {  
		    f.setDescripcion(pform.getDescripcion());
		    f.setFechaLim(pform.getFechaLim());
		    f.setPlazasDisp(pform.getPlazasDisp());
		    f.setPlazasReserv(pform.getPlazasReserv());
		    f.setPrecioXpersona(pform.getPrecioXpersona());
		    f.setProducto(pform.getProducto());
		    f.setReservas(null);
			OfertaDao.attachDirty(f);
			return true; 
		} else {
			return false;
		} 
	}
	
	
	/**
	 * Solicita la lista de todas las ofertas que cumplan con los requisitos
	 * introducidos en un formulario y recogidos en un objeto de la clase Action
	 * @param form objeto de la clase Action con los datos de búsqueda.
	 * @return listaOfertas Lista de todas las ofertas que cumplen los criterios de búsqueda.
	 */
	public List<Object> searchByFields(Action form){

		List<Object> resul = new ArrayList<Object>();
	    return resul;
		
	}   
	

	/**
	 * Actualiza los datos del cliente en función de los campos recogidos en objeto de la clase Action
	 * @param form objeto de la clase Action con los datos de la oferta
	 */
	@Override
	public void update(Action form) {
		// Actualización de los datos de una oferta desde el formulario de detalle de una oferta
		Oferta f = new Oferta();
		ModificarOfertaAction pform = (ModificarOfertaAction) form;
		f=(Oferta)this.searchById(pform.getId());

		//Campos que sí se pueden modificar:
		f.setFechaLim(pform.getFechaLim());
		f.setPlazasDisp(pform.getPlazasDisp());
		f.setPlazasReserv(pform.getPlazasReserv());
		OfertaDao.attachDirty(f);
	} 

	/**
	 * Actualiza los datos de una oferta
	 * @param oferta Oferta cuyos datos se quieren actualizar
	 */
	public void update(Oferta oferta) {
		OfertaDao.attachDirty(oferta);		
	}
	
	/**
	 * Búsqueda de oferta por identificador.
	 * @param id identifificador en la base de datos de la oferta.
	 * @return f Objeto correspondiente a la oferta con el identificador dado.
	 */
	public Object searchById(int id){
		Oferta f;
		f = OfertaDao.findById(id);
		return f;
	}

	/**
	 * Borra la oferta.
	 * @param o Objeto correspondiente a la oferta que se quiere borrar.
	 */
	@Override
	public void delete(Object o) {
		Oferta f;
		f = (Oferta)o;
		OfertaDao.delete(f);
	}

}
